using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._GeostatisticalAnalystTools._WorkingwithGeostatisticalLayers
{
    /// <summary>
    /// <para>GA Layer To Contour</para>
    /// <para>Creates a feature class of contours from a geostatistical layer. The output feature class can be either a line feature class of contour lines or a polygon feature class of filled contours.</para>
    /// <para>根据地统计图层创建等值线要素类。输出要素类可以是等值线的线要素类，也可以是填充等值线的面要素类。</para>
    /// </summary>    
    [DisplayName("GA Layer To Contour")]
    public class GALayerToContour : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public GALayerToContour()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_geostat_layer">
        /// <para>Input geostatistical layer</para>
        /// <para>The geostatistical layer to be analyzed.</para>
        /// <para>要分析的地统计图层。</para>
        /// </param>
        /// <param name="_contour_type">
        /// <para>Contour type</para>
        /// <para><xdoc>
        ///   <para>Type of contour to represent the geostatistical layer.</para>
        ///   <bulletList>
        ///     <bullet_item>Contour— The contour or isoline representation of the geostatistical layer. Displays the lines in either draft or presentation quality.</bullet_item><para/>
        ///     <bullet_item>Filled contour—The polygon representation of the geostatistical layer. It assumes for the graphical display that the values between contour lines are the same for all locations within the polygon. Displays the lines in either draft or presentation quality.</bullet_item><para/>
        ///     <bullet_item>Same as layer—Use the current renderer of the input geostatistical layer.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>表示地统计图层的等值线类型。</para>
        ///   <bulletList>
        ///     <bullet_item>等值线 - 地统计图层的等值线或等值线表示。以草稿或演示质量显示行。</bullet_item><para/>
        ///     <bullet_item>填充等值线 - 地统计图层的面表示。对于图形显示，它假定面内所有位置的等值线之间的值相同。以草稿或演示质量显示行。</bullet_item><para/>
        ///     <bullet_item>与图层相同 - 使用输入地统计图层的当前渲染器。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        /// <param name="_out_feature_class">
        /// <para>Output feature class</para>
        /// <para>The output feature class will either be a polyline or a polygon, depending on the selected contour type.</para>
        /// <para>输出要素类将为折线或面，具体取决于所选的等值线类型。</para>
        /// </param>
        public GALayerToContour(object _in_geostat_layer, _contour_type_value _contour_type, object _out_feature_class)
        {
            this._in_geostat_layer = _in_geostat_layer;
            this._contour_type = _contour_type;
            this._out_feature_class = _out_feature_class;
        }
        public override string ToolboxName => "Geostatistical Analyst Tools";

        public override string ToolName => "GA Layer To Contour";

        public override string CallName => "ga.GALayerToContour";

        public override List<string> AcceptEnvironments => ["extent", "geographicTransformations", "outputCoordinateSystem", "parallelProcessingFactor", "scratchWorkspace", "workspace"];

        public override object[] ParameterInfo => [_in_geostat_layer, _contour_type.GetGPValue(), _out_feature_class, _contour_quality.GetGPValue(), _classification_type.GetGPValue(), _classes_count, _classes_breaks, _out_elevation];

        /// <summary>
        /// <para>Input geostatistical layer</para>
        /// <para>The geostatistical layer to be analyzed.</para>
        /// <para>要分析的地统计图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input geostatistical layer")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_geostat_layer { get; set; }


        /// <summary>
        /// <para>Contour type</para>
        /// <para><xdoc>
        ///   <para>Type of contour to represent the geostatistical layer.</para>
        ///   <bulletList>
        ///     <bullet_item>Contour— The contour or isoline representation of the geostatistical layer. Displays the lines in either draft or presentation quality.</bullet_item><para/>
        ///     <bullet_item>Filled contour—The polygon representation of the geostatistical layer. It assumes for the graphical display that the values between contour lines are the same for all locations within the polygon. Displays the lines in either draft or presentation quality.</bullet_item><para/>
        ///     <bullet_item>Same as layer—Use the current renderer of the input geostatistical layer.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>表示地统计图层的等值线类型。</para>
        ///   <bulletList>
        ///     <bullet_item>等值线 - 地统计图层的等值线或等值线表示。以草稿或演示质量显示行。</bullet_item><para/>
        ///     <bullet_item>填充等值线 - 地统计图层的面表示。对于图形显示，它假定面内所有位置的等值线之间的值相同。以草稿或演示质量显示行。</bullet_item><para/>
        ///     <bullet_item>与图层相同 - 使用输入地统计图层的当前渲染器。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Contour type")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _contour_type_value _contour_type { get; set; }

        public enum _contour_type_value
        {
            /// <summary>
            /// <para>Same as layer</para>
            /// <para>Same as layer—Use the current renderer of the input geostatistical layer.</para>
            /// <para>与图层相同 - 使用输入地统计图层的当前渲染器。</para>
            /// </summary>
            [Description("Same as layer")]
            [GPEnumValue("SAME_AS_LAYER")]
            _SAME_AS_LAYER,

            /// <summary>
            /// <para>Contour</para>
            /// <para>Contour— The contour or isoline representation of the geostatistical layer. Displays the lines in either draft or presentation quality.</para>
            /// <para>等值线 - 地统计图层的等值线或等值线表示。以草稿或演示质量显示行。</para>
            /// </summary>
            [Description("Contour")]
            [GPEnumValue("CONTOUR")]
            _CONTOUR,

            /// <summary>
            /// <para>Filled contour</para>
            /// <para>Filled contour—The polygon representation of the geostatistical layer. It assumes for the graphical display that the values between contour lines are the same for all locations within the polygon. Displays the lines in either draft or presentation quality.</para>
            /// <para>填充等值线 - 地统计图层的面表示。对于图形显示，它假定面内所有位置的等值线之间的值相同。以草稿或演示质量显示行。</para>
            /// </summary>
            [Description("Filled contour")]
            [GPEnumValue("FILLED_CONTOUR")]
            _FILLED_CONTOUR,

        }

        /// <summary>
        /// <para>Output feature class</para>
        /// <para>The output feature class will either be a polyline or a polygon, depending on the selected contour type.</para>
        /// <para>输出要素类将为折线或面，具体取决于所选的等值线类型。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output feature class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_feature_class { get; set; }


        /// <summary>
        /// <para>Contour quality</para>
        /// <para><xdoc>
        ///   <para>Determines the smoothness of contour line representation.</para>
        ///   <bulletList>
        ///     <bullet_item>Draft— The default Draft quality presents a generalized version of isolines for faster display.</bullet_item><para/>
        ///     <bullet_item>Presentation—The Presentation option ensures more detailed isolines for the output feature class.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>确定等值线表示的平滑度。</para>
        ///   <bulletList>
        ///     <bullet_item>拔模 （Draft） - 默认的“拔模”（Draft） 质量显示等值线的通用版本，以便更快地显示。</bullet_item><para/>
        ///     <bullet_item>表示 - 表示选项可确保输出要素类的等值线更详细。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Contour quality")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _contour_quality_value _contour_quality { get; set; } = _contour_quality_value._DRAFT;

        public enum _contour_quality_value
        {
            /// <summary>
            /// <para>Draft</para>
            /// <para>Draft— The default Draft quality presents a generalized version of isolines for faster display.</para>
            /// <para>拔模 （Draft） - 默认的“拔模”（Draft） 质量显示等值线的通用版本，以便更快地显示。</para>
            /// </summary>
            [Description("Draft")]
            [GPEnumValue("DRAFT")]
            _DRAFT,

            /// <summary>
            /// <para>Presentation</para>
            /// <para>Presentation—The Presentation option ensures more detailed isolines for the output feature class.</para>
            /// <para>表示 - 表示选项可确保输出要素类的等值线更详细。</para>
            /// </summary>
            [Description("Presentation")]
            [GPEnumValue("PRESENTATION")]
            _PRESENTATION,

        }

        /// <summary>
        /// <para>Classification type</para>
        /// <para><xdoc>
        ///   <para>Specifies how the contour breaks will be calculated.</para>
        ///   <bulletList>
        ///     <bullet_item>Geometric interval—Contour breaks are calculated based on geometric intervals.</bullet_item><para/>
        ///     <bullet_item>Equal interval—Contour breaks are calculated based on equal intervals.</bullet_item><para/>
        ///     <bullet_item>Quantile—Contour breaks are calculated from quantiles of the input data.</bullet_item><para/>
        ///     <bullet_item>Manual—Specify your own break values.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定如何计算等值线断裂。</para>
        ///   <bulletList>
        ///     <bullet_item>几何间隔 （Geometric interval） - 等值线断裂线根据几何间隔进行计算。</bullet_item><para/>
        ///     <bullet_item>相等间隔 - 基于相等间隔计算等值线断裂。</bullet_item><para/>
        ///     <bullet_item>分位数—等值线断点根据输入数据的分位数计算得出。</bullet_item><para/>
        ///     <bullet_item>手动 （Manual） - 指定您自己的中断值。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Classification type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _classification_type_value _classification_type { get; set; } = _classification_type_value._GEOMETRIC_INTERVAL;

        public enum _classification_type_value
        {
            /// <summary>
            /// <para>Geometric interval</para>
            /// <para>Geometric interval—Contour breaks are calculated based on geometric intervals.</para>
            /// <para>几何间隔 （Geometric interval） - 等值线断裂线根据几何间隔进行计算。</para>
            /// </summary>
            [Description("Geometric interval")]
            [GPEnumValue("GEOMETRIC_INTERVAL")]
            _GEOMETRIC_INTERVAL,

            /// <summary>
            /// <para>Equal interval</para>
            /// <para>Equal interval—Contour breaks are calculated based on equal intervals.</para>
            /// <para>相等间隔 - 基于相等间隔计算等值线断裂。</para>
            /// </summary>
            [Description("Equal interval")]
            [GPEnumValue("EQUAL_INTERVAL")]
            _EQUAL_INTERVAL,

            /// <summary>
            /// <para>Quantile</para>
            /// <para>Quantile—Contour breaks are calculated from quantiles of the input data.</para>
            /// <para>分位数—等值线断点根据输入数据的分位数计算得出。</para>
            /// </summary>
            [Description("Quantile")]
            [GPEnumValue("QUANTILE")]
            _QUANTILE,

            /// <summary>
            /// <para>Manual</para>
            /// <para>Manual—Specify your own break values.</para>
            /// <para>手动 （Manual） - 指定您自己的中断值。</para>
            /// </summary>
            [Description("Manual")]
            [GPEnumValue("MANUAL")]
            _MANUAL,

        }

        /// <summary>
        /// <para>Number of classes</para>
        /// <para><xdoc>
        ///   <para>Specify the number of classes in the output feature class.</para>
        ///   <para>If Contour type is set to output filled contour polygons, the number of polygons created will equal the value specified in this parameter. If it is set to output contour polylines, the number of polylines will be one less than the value specified in this parameter (because N class intervals define N-1 contour break values).</para>
        ///   <para>This parameter does not apply if the Classification type is set to Manual.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定输出要素类中的类数。</para>
        ///   <para>如果“等值线类型”设置为输出填充的等值线面，则创建的多边形数将等于此参数中指定的值。如果设置为输出等值线折线，则折线数将比此参数中指定的值少 1 条（因为 N 类间隔定义了 N-1 个等高线断裂值）。</para>
        ///   <para>如果“分类类型”设置为“手动”，则此参数不适用。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Number of classes")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long _classes_count { get; set; } = 10;


        /// <summary>
        /// <para>Class breaks</para>
        /// <para><xdoc>
        ///   <para>The list of break values if the Classification type is set to Manual.</para>
        ///   <bulletList>
        ///     <bullet_item>For contour output, these are the values of the contour lines.</bullet_item><para/>
        ///     <bullet_item>For filled contour, these are the upper limits of each class interval. Note that if the largest break value is less than the maximum of the geostatistical layer, the output feature class will not fill up the entire rectangular extent; all locations with predicted values above the largest break will not receive filled contours.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>如果“分类类型”设置为“手动”，则为中断值列表。</para>
        ///   <bulletList>
        ///     <bullet_item>对于等值线输出，这些是等值线的值。</bullet_item><para/>
        ///     <bullet_item>对于填充等值线，这些是每个类间隔的上限。请注意，如果最大断裂值小于地统计图层的最大值，则输出要素类将不会填充整个矩形范围;预测值高于最大断裂点的所有位置都不会收到填充等值线。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Class breaks")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _classes_breaks { get; set; } = null;


        /// <summary>
        /// <para>Output elevation</para>
        /// <para>For 3D interpolation models, you can export contours at any elevation. Use this parameter to specify the elevation that you want to export. If left empty, the elevation will be inherited from the input layer. The units will default to the same units of the input layer.</para>
        /// <para>对于 3D 插值模型，可以导出任意高程的等值线。使用此参数指定要导出的高程。如果留空，则高程将从输入图层继承。这些单位将默认为输入图层的相同单位。</para>
        /// <para>单位： Inches | Feet | Yards | Miles | NauticalMiles | Millimeters | Centimeters | Decimeters | Meters | Kilometers </para>
        /// </summary>
        [DisplayName("Output elevation")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string? _out_elevation { get; set; } = null;


        public GALayerToContour SetEnv(object extent = null, object geographicTransformations = null, object outputCoordinateSystem = null, object parallelProcessingFactor = null, object scratchWorkspace = null, object workspace = null)
        {
            base.SetEnv(extent: extent, geographicTransformations: geographicTransformations, outputCoordinateSystem: outputCoordinateSystem, parallelProcessingFactor: parallelProcessingFactor, scratchWorkspace: scratchWorkspace, workspace: workspace);
            return this;
        }

    }

}